package cn.virens.web.components.shiro;

import java.util.Collection;

import cn.virens.database.mysql.model.sys.SysUser;
import cn.virens.web.components.shiro.token.ChannelResult;
import cn.virens.web.components.shiro.token.ChannelToken;

public interface ShiroAuthInterface {
	public static final String SHIRO_BEAN_NAME = "cn.virens.web.components.shiro.ShiroAuthInterface";

	/**
	 * 获取当前用户信息
	 * 
	 * @param  principal 用户令牌
	 * @return           当前用户信息
	 */
	SysUser getUser(Object principal);

	/**
	 * 获取当前用户角色列表
	 * 
	 * @param  principal 用户账户
	 * @return           当前用户角色列表
	 */
	Collection<String> getRoles(Object principal);

	/**
	 * 获取当前用户用户组列表
	 * 
	 * @param  principal 用户账户
	 * @return           当前用户用户组列表
	 */
	Collection<String> getGroups(Object principal);

	/**
	 * 获取当前用户权限列表
	 * 
	 * @param  principal 用户账户
	 * @return           当前用户权限列表
	 */
	Collection<String> getResources(Object principal);

	/**
	 * 获取当前用户登录密码
	 * 
	 * @param  principal 用户账户
	 * @return           当前用户登录密码
	 */
	ChannelResult getUserToken(ChannelToken token);

	/**
	 * 登录成功回调
	 * 
	 * @param username 用户名
	 * @param host     登录地址
	 */
	void onLoginSuccess(String username, String host);

	/**
	 * 登录失败回调
	 * 
	 * @param username 用户名
	 * @param host     登录地址
	 */
	void onLoginFailure(String username, String host);

}
